/**
    算法描述：
    核心问题：
    解决所需数据结构+算法：
**/
#include<cstdio>
using namespace std;

int f[30010] = {0};

int cen(int x, int y) {
// x 和 y 若不是一条链上的话，输出-1；是则输出 x 和 y 的层数距离。并且 x 在 y 链上。
    int ans = 0;
    if (f[x] == y) {
        return 0;
    }
    while(f[x] != y) {
        if(f[x] == x) {
            return -1;
        }
        x = f[x];
        ans++;
    }
    return ans;
}

int max(int x, int y) {
    return x > y ? x : y;
}

int main() {
    int T;
    scanf("%d", &T);
    for(int i=0; i<=30000; i++) {
        f[i] = i;
    }
    while(T--) {
        char ch[2];
        int x, y;
        scanf("%s%d%d", ch, &x, &y);
        if(ch[0] == 'M') {
            f[y] = x;
        } else {
            printf("%d\n", max(cen(x, y), cen(y, x)));
        }
    }
    return 0;
}